/**
@ 作者: 秦东
@ 时间: 2024-12-04 09:22:35
@ 功能: 路由配置管理项
*/
import { createRouter,createWebHashHistory,RouteRecordRaw } from "vue-router";
//进度条
import NProgress from "nprogress";
import "nprogress/nprogress.css";

import { useUserStoreHook } from '@/utils/pinia/modules/user'

const appTokenKey = import.meta.env.VITE_APP_TOKEN_KEY          //声明apptoken字符串
NProgress.configure({ showSpinner: false }); // 进度条

// 白名单路由
const whiteList = ["/login","/404"];
/**
@ 作者: 秦东
@ 时间: 2024-10-25 08:56:50
@ 功能: 静态路由
*/
export const staticRouting : RouteRecordRaw[] = [
   
    {
        path: '/',
        component: () => import('@/views/home/index.vue'),
        meta: { hidden: true },
    },
    {
        path: '/login',
        component: () => import('@/views/login/index.vue'),
        meta: { hidden: true },
    },
    {
        path: '/404',
        component: () => import('@/views/errorpage/404.vue'),
        meta: { hidden: true },
    }
]

/**createRouter:创建路由实列,可以管理多个路由
createWebHistory：创建history模式的路由不带#
createWebHashHistory：创建history模式的路由带#
*/
const router = createRouter({
    history: createWebHashHistory(import.meta.env.BASE_URL),
    routes: staticRouting as RouteRecordRaw[],
    // 刷新时，滚动条位置还原
    scrollBehavior: () => ({ left: 0, top: 0 }),
})

/**
@ 作者: 秦东
@ 时间: 2024-12-04 11:22:58
@ 功能: 执行路由检查
*/
router.beforeEach(async (to:any, from:any, next:any) => {
    NProgress.start(); 
    const hasToken = localStorage.getItem(appTokenKey);
    console.log("执行路由检查",hasToken)
    if(hasToken){   //判断是否有验证信息
        
        switch(to.path){    //判断路径是否需要验证
            case "/login":
                next({ path: "/" });
                break;
            default:
                const userStore = useUserStoreHook();
                const hasRoles = userStore.userKey && userStore.userKey.length > 0;
                if (hasRoles) { //判断Key是否存在！好判断是否已经登录！
                    if (to.matched.length === 0) {
                        from.name ? next({ name: from.name }) : next("/404");
                    } else {
                        next();
                    }
                } else {
                    try {
                        // const { perms } = await userStore.getInfo();
                        // const accessRoutes = await permissionStore.generateRoutes(perms);
                        next({ ...to, replace: true });
                    } catch (error) {
                        // console.error("移除 token 并跳转登录页",error);
                        // 移除 token 并跳转登录页
                        await userStore.setUserInfoNull();
                        next(`/login`);
                        NProgress.done();
                    }
                }
                
                break;
        }
    }else{
        //无需验证的时候访问白名单路由
        if(whiteList.indexOf(to.path) !== -1){
            next();
        }else{
            next(`/login`);
            NProgress.done();
        }
    }
})



/**
@ 作者: 秦东
@ 时间: 2024-12-04 11:21:25
@ 功能: 重置路由
*/
export function resetRouter() {
    router.replace({ path: "/" });
}
/**
@ 作者: 秦东
@ 时间: 2024-12-04 11:21:42
@ 功能: 路由执行完毕关闭执行关闭进度条
*/
router.afterEach(() => {
    NProgress.done();           //关闭进度条！
});
export default router